;SCOPE HANDLER-VR12

R0	=	%0
R1	=	%1
R2	=	%2
R3	=	%3
R4	=	%4
R5	=	%5
SP	=	%6
PC	=	%7

STATUS	=	177776
SWREG	=	177570

VR12ST	=	170000
VR12IN	=	170002
VR12VB	=	170004
VR12HB	=	170006

	.=6
	.WORD	.+2,0

	.=0
	JMP	@#START

	.=1000

START:	JSR	PC,VR12ON	;REFRESH THE SCREEN
	TST	SWREG		;SEE IF BIT 15 IS ON
	BMI	START		;LOOP IF NOTHING TO DO

NOTYET:	JSR	PC,VR12ON	;SHE WILL FADE IF WE DON'T HURRY
	TST	SWREG		;HE HAS TO TURN IT ON THEN OFF
	BPL	NOTYET

	MOV	SWREG,R4	;SAVE THE SWITCHES
	BIT	#40000,R4	;SEE IF FINAL POINT
	BNE	A01
	MOV	R4,R5
	SWAB	R5
	ROR	R5
	ROR	R5
	ROR	R5
	ROR	R5
	BIC	#177774,R5	;LEAVE ONLY TWO BITS
	JSR	PC,@TBL(R5)	;DISPATCH
	BR	START
TBL:	.WORD	A02
	.WORD	A03
	.WORD	A04
	.WORD	A05

A05:	MOV	R4,R3		;SET CHARACTER PART 2
	RTS	PC
A04:	MOV	R4,R2		;SET CHARACTER PART 1
	RTS	PC
A03:	MOV	R4,R1		;SET Y
	RTS	PC
A02:	MOV	R4,R0		;SET X
	RTS	PC


PUTBFP:	MOV	R4,-(SP)
	MOV	R5,-(SP)	;SAVE THE REGISTERS WE USE
	MOV	#PTSBUF,R4
	MOV	-(R4),R5	;GET THE COUNT
	ASL	R5
	INC	(R4)		;INCREMENT THE COUNTER
	SUB	R5,R4		;POINT TO THE NEXT ENTRY PLACE
	MOV	R1,-(R4)	;STORE THE Y VALUE
	MOV	R0,-(R4)	;STORE THE X VALUE
	MOV	(SP)+,R5
	MOV	(SP)+,R4	;RESTORE THE REGS
	RTS	PC

PUTBFC:	MOV	R4,-(SP)
	MOV	R5,-(SP)	;SAVE OUR TEMP REGS
	MOV	#CHRBUF,R4	;GET BUFFER POINTER
	MOV	(R4),R5		;GET THE COUNT
	ADD	#2,(R4)+
	ASL	R5
	ADD	R5,R4
	MOV	R1,(R4)+
	MOV	R0,(R4)+
	MOV	R2,(R4)+
	MOV	R3,(R4)+
	MOV	(SP)+,R5
	MOV	(SP)+,R4
	RTS	PC

A01:	BIT	#2,R4
	BNE	A06		;IF CONTROL
	BIT	#1,R4
	BNE	A00		;IF CHARACTER
	JSR	PC,PUTBFP
	BR	START
A00:	JSR	PC,PUTBFC
	BR	START

A06:	BIT	#4,R4
	BEQ	A07		;IF NOT CHARACTER
	CLR	CHRBUF
A07:	BIT	#10,R4
	BEQ	START		;IF NOT POINT
	CLR	PTSBUF-2
	BR	START

VR12ON:	MOV	R5,-(SP)
	MOV	R4,-(SP)
	MOV	R3,-(SP)
	MOV	R2,-(SP)
	MOV	R1,-(SP)
	MOV	R0,-(SP)
	CLR	VR12ST		;GO TO POINT MODE
	MOV	#VR12VB,R0	;VERT BUFFER ADDRESS TO R0
	MOV	#PTSBUF,R1	;POINTS BUFFER
	MOV	-(R1),R2	;# OF POINTS
	BR	GETPT
LOOP1:	MOV	R3,(R0)+	;OUTPUT THE Y POSITION
	MOV	R4,(R0)		;AND THE X NOW GO
	SUB	#2,R0		;TO ELIMINATE THE MSYN TO THE SCOPE

	MOV	(R1),(R1)	;5.2US
	.WORD	240		;1.5US

GETPT:	DEC	R2		;SEE IF AND ARE LEFT
	BLT	NXTPRT		;IF DONE GO DO CHARACTERS
	MOV	-(R1),R3	;PICK UP Y CORD
	MOV	-(R1),R4	;AND THE X
	BR	LOOP1
NXTPRT:	CLR	-(SP)		;MAKE A SEVENTH REGISTER
	MOV	#VR12ST,R0
	MOV	#CHRBUF,R1
	MOV	(R1)+,R2	;GET # CHR * 2
	BR	GETCHR
LOOP2:	MOV	(SP),(R0)+	;CHARACTER MODE AND SIZE
	MOV	R3,(R0)+	;BIT PATTERN
	MOV	R4,(R0)+	;Y POS
	MOV	R5,(R0)		;X POS AND GO
	SUB	#6,R0
GETCHR:	BIT	#1,R2		;SEE IF FIRST PART OF SECOND
	BNE	PART2
	MOV	(R1)+,R4	;A POSSIBLE Y
	MOV	(R1)+,R5	;A POSSIBLE X
LOOP3:	DEC	R2		;DECREMENT COUNTER
	BLT	DONE
	MOV	(R1),R3		;GET THE CHARACTER WORD
	SWAB	R3
	ROR	R3
	ROR	R3
	ROR	R3
	ROR	R3
	BIC	#177760,R3	;LEAVE ONLY 4 BITS
	MOV	R3,(SP)		;STORE THE CONTROL WORD
	MOV	(R1)+,R3	;BIT PATTERN
	BR	LOOP2
PART2:	BIT	#1,(SP)		;SEE IF BIG OR LITTLE
	BNE	LITTLE
	ADD	#10,R5
	BR	LOOP3
LITTLE:	ADD	#4,R5
	BR	LOOP3

DONE:	TST	(SP)+		;GET RID OF THE EXTRA "REGISTER"
	MOV	(SP)+,R0
	MOV	(SP)+,R1
	MOV	(SP)+,R2
	MOV	(SP)+,R3
	MOV	(SP)+,R4
	MOV	(SP)+,R5
	RTS	PC		;EXIT

CHRBUF:	.WORD	0

	.=.+6000.

	.WORD	0
PTSBUF	=.

	.END

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          